package com.neusoft.hifly.message.msg.dao;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.neusoft.hifly.message.msg.entity.MsgInboxObj;

/**
 * Title: 消息服务
 * <p>
 * Description: 收件箱 Dao
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
@Mapper
public interface IMsgInboxDao extends BaseMapper<MsgInboxObj> {
	/**
	 * 单条消息已读
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicId
	 *            逻辑ID
	 * @param receiveTime
	 *            接收时间
	 */
	void updateIsRead(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("logicId") long logicId, @Param("receiveTime") LocalDateTime receiveTime);

	/**
	 * 全部消息已读
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param receiveUserLogicId
	 *            接收人
	 * @param receiveTime
	 *            接收时间
	 */
	void updateAllIsRead(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("receiveUserLogicId") long receiveUserLogicId, @Param("receiveTime") LocalDateTime receiveTime);

	/**
	 * 删除对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicId
	 *            对象ID
	 */
	void deleteByLogicId(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("logicId") long logicId);

	/**
	 * 删除对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param objLogicId
	 *            业务表单的ID
	 */
	void deleteByObjLogicId(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("objLogicId") long objLogicId);

	/**
	 * 删除对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param msgLogicId
	 *            父消息逻辑ID
	 */
	void deleteByMsgLogicId(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("msgLogicId") long msgLogicId);

	/**
	 * 根据id查询对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param logicId
	 *            id
	 * @return 对象
	 */
	MsgInboxObj getByLogicId(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("logicId") long logicId);

	/**
	 * 统计所有
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户ID
	 * @return 数量
	 */
	int countAll(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId);

	/**
	 * 统计未读信息数量
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户ID
	 * @param userLogicId
	 *            用户ID
	 * @return 数量
	 */
	int countAllUnread(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("userLogicId") long userLogicId);

	/**
	 * 查询所有对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @return 对象集合
	 */
	List<MsgInboxObj> findAll(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId);

	/**
	 * 查询所有对象
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param msgLogicId
	 *            父消息逻辑ID
	 * @return 对象集合
	 */
	List<MsgInboxObj> findByMsgLogicId(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("msgLogicId") long msgLogicId);

	/**
	 * 统计未读消息
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param map
	 *            参数
	 * @return 数量
	 */
	int countHaveMsg(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			@Param("map") Map<String, Object> map);

	/**
	 * 搜索未读消息
	 *
	 * @param organCode
	 *            租户编码
	 * @param organLogicId
	 *            租户逻辑ID
	 * @param page
	 *            分页
	 * @param map
	 *            参数
	 * @return 用户
	 */
	List<MsgInboxObj> searchHaveMsg(@Param("organCode") String organCode, @Param("organLogicId") long organLogicId,
			com.baomidou.mybatisplus.plugins.Page<MsgInboxObj> page, @Param("map") Map<String, Object> map);

}